package com.jiangjiang.eshop.inventory.service;

import com.jiangjiang.eshop.order.dto.OrderInfoDTO;
import com.jiangjiang.eshop.wms.dto.PurchaseInputOrderDTO;
import com.jiangjiang.eshop.wms.dto.ReturnGoodsInputOrderDTO;

/**
 * @ClassName InventoryFacadeService
 * @Description 库存中心对外提供的接口
 * @Author jhw
 * @Date 2021/5/24 23:21
 * @Version 1.0
 **/
public interface InventoryService {

    /**
     * 通知库存中心，采购入库完成事件发生了
     *
     * @param purchaseInputOrderDTO 采购入库单DTO
     * @return 处理结果
     */
    Boolean informPurchaseInputFinishedEvent(PurchaseInputOrderDTO purchaseInputOrderDTO) throws Exception;

    /**
     * 通知库存中心，"提交订单"事件发生了
     *
     * @param orderInfoDTO 订单 DTO
     * @return 处理结果
     */
    Boolean informSubmitOrderEvent(OrderInfoDTO orderInfoDTO) throws Exception;

    /**
     * 通知库存中心，”支付订单“事件发生了
     *
     * @param orderInfoDTO 订单DTO
     * @return 处理结果
     */
    Boolean informPayOrderEvent(OrderInfoDTO orderInfoDTO) throws Exception;

    /**
     * 通知库存中心，取消订单事件发生了
     *
     * @param orderInfoDTO 订单 DTO
     * @return 处理结果
     */
    Boolean informCancelOrderEvent(OrderInfoDTO orderInfoDTO) throws Exception;

    /**
     * 通知库存中心，”完成退货入库“事件发生了
     *
     * @param returnGoodsInputOrderDTO 退货入库单DTO
     * @return 处理结果
     */
    Boolean informReturnGoodsInputFinished(ReturnGoodsInputOrderDTO returnGoodsInputOrderDTO) throws Exception;

    /**
     * 查询商品库存
     *
     * @param goodsSkuId 商品sku id
     * @return 库存
     */
    Long getSaleStockQuantity(Long goodsSkuId);

    /**
     * 设置销售库存
     * @param goodsSkuId 商品sku id
     * @param saleStockQuantity 销售库存
     * @return 处理结果
     */
    Boolean setSaleStockQuantity(Long goodsSkuId, Long saleStockQuantity);
}
